/**
 *
 */
package com.module.boots.coder.utils;

import org.apache.commons.lang.StringUtils;

/**
 * 列工具类
 * @author：溪云阁
 * @date：2020年9月3日
 */
public class ColumnUtils {

    /**
     * 格式化名称,第一个字母大写
     * @author 溪云阁
     * @param name
     * @return String
     */
    public static String firstNameUpper(String name) {
        if (StringUtils.isNotBlank(name)) {
            name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
        }
        return name;
    }

    /**
     * 格式化名称,第一个字母小写
     * @author 溪云阁
     * @param name
     * @return String
     */
    public static String firstNameLower(String name) {
        if (StringUtils.isNotBlank(name)) {
            name = name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
        }
        return name;
    }

    /**
     * 格式化名称,字符串第一个字母小写,如果存在_,后面第一个字母为大写
     * @author 溪云阁
     * @param name
     * @return String
     */
    public static String formatUnderlineNameFirstNameLower(String name) {
        final String[] split = name.split("_");
        if (split.length > 1) {
            final StringBuffer sb = new StringBuffer();
            for (int i = 0; i < split.length; i++) {
                String tempName = "";
                if (i == 0) {
                    tempName = split[0].substring(0, 1).toLowerCase() + split[0].substring(1, split[0].length());
                    sb.append(tempName);
                    continue;
                }
                tempName = split[i].substring(0, 1).toUpperCase() + split[i].substring(1, split[i].length());
                sb.append(tempName);
            }
            return sb.toString();
        }
        final String tempName = split[0].substring(0, 1).toLowerCase() + split[0].substring(1, split[0].length());
        return tempName;
    }

    /**
     * 格式化表名,字符串第一个字母大写,如果存在_,后面第一个字母为大写
     * @author 溪云阁
     * @param name
     * @return String
     */
    public static String formatUnderlineNameFirstNameUpper(String name) {
        final String[] split = name.split("_");
        if (split.length > 1) {
            final StringBuffer sb = new StringBuffer();
            for (int i = 0; i < split.length; i++) {
                final String tempName = split[i].substring(0, 1).toUpperCase() + split[i].substring(1, split[i].length());
                sb.append(tempName);
            }
            return sb.toString();
        }
        final String tempName = split[0].substring(0, 1).toUpperCase() + split[0].substring(1, split[0].length());
        return tempName;
    }

    /**
     * 获取空值
     * @author 溪云阁
     * @param nullable
     * @return String
     */
    public static String getNullAble(String nullable) {
        if ("YES".equals(nullable) || "yes".equals(nullable) || "y".equals(nullable) || "Y".equals(nullable)) {
            return "Y";
        }
        if ("NO".equals(nullable) || "N".equals(nullable) || "no".equals(nullable) || "n".equals(nullable)) {
            return "N";
        }
        return null;
    }

    /**
     * 获取项目地址
     * @author OprCalf
     * @return String
     */
    public static String getProjectPath() {
        final String path = System.getProperty("user.dir").replace("\\", "/") + "/";
        return path;
    }

    /**
     * 获取字段的类型
     * @author OprCalf
     * @param dataType
     * @param precision
     * @param scale
     * @return String
     */
    public static String getType(String dataType, String precision,
            String scale) {
        dataType = dataType.toLowerCase();
        if (dataType.contains("char") || dataType.contains("text")) {
            dataType = "String";
        } else if (dataType.contains("bit")) {
            dataType = "boolean";
        } else if (dataType.contains("bigint")) {
            dataType = "Long";
        } else if (dataType.contains("int")) {
            dataType = "Integer";
        } else if (dataType.contains("float")) {
            dataType = "Float";
        } else if (dataType.contains("double")) {
            dataType = "Double";
        } else if (dataType.contains("number")) {
            if (StringUtils.isNotBlank(scale) && Integer.parseInt(scale) > 0) {
                dataType = "BigDecimal";
            } else if (StringUtils.isNotBlank(precision) && Integer.parseInt(precision) > 6) {
                dataType = "Long";
            } else {
                dataType = "Integer";
            }
        } else if (dataType.contains("decimal")) {
            dataType = "BigDecimal";
        } else if (dataType.contains("date")) {
            dataType = "Date";
        } else if (dataType.contains("time")) {
            dataType = "Timestamp";
        } else if (dataType.contains("clob")) {
            dataType = "Clob";
        } else {
            dataType = "Object";
        }
        return dataType;

    }

}
